package com.docmgmt.mvp.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import io.swagger.v3.oas.models.Components;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Knife4j API文档配置
 *
 * 访问地址: http://localhost:8080/doc.html
 *
 * @author Dora
 */
@Configuration
public class Knife4jConfig {

    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                .info(new Info()
                        .title("文档管理系统 API")
                        .version("1.0.0")
                        .description("文档管理系统MVP - 后端API接口文档\n\n" +
                                "## 功能模块\n" +
                                "- **权限管理**: 文件夹权限、文件分享\n" +
                                "- **文件操作**: 上传、下载、重命名、移动、复制、批量操作\n" +
                                "- **版本管理**: 文件版本历史、版本恢复\n" +
                                "- **标签管理**: 创建标签、文件打标签\n" +
                                "- **收藏与评论**: 收藏文件/文件夹、评论交流\n" +
                                "- **搜索功能**: 全局搜索、高级搜索\n" +
                                "- **回收站**: 软删除、恢复、永久删除\n\n" +
                                "## 认证说明\n" +
                                "1. 先调用 `/api/v1/auth/login` 登录获取JWT令牌\n" +
                                "2. 点击右上角 🔓 按钮，输入令牌（格式: `Bearer {token}`）\n" +
                                "3. 测试账号: admin / password123")
                        .contact(new Contact()
                                .name("开发团队")
                                .email("dev@docmgmt.com"))
                        .license(new License()
                                .name("Apache 2.0")
                                .url("https://www.apache.org/licenses/LICENSE-2.0.html")))
                .components(new Components()
                        .addSecuritySchemes("Bearer认证", new SecurityScheme()
                                .type(SecurityScheme.Type.HTTP)
                                .scheme("bearer")
                                .bearerFormat("JWT")
                                .description("请输入JWT令牌，格式: Bearer {token}")))
                .addSecurityItem(new SecurityRequirement().addList("Bearer认证"));
    }
}
